//
//  main.m
//  04-集合（二）
//
//  Created by dllo on 16/7/7.
//  Copyright © 2016年 dllo. All rights reserved.
//

#import <Foundation/Foundation.h>
#import "Contact.h"
#import "ContactManager.h"
int main(int argc, const char * argv[]) {
   // 1. 字典
   // 存储键值对（key － Value）的集合类型
   // 字典中存储的数据没有顺序
   // 通过key值存储 查询 value
   // 1> 初始化
   // initWithObjectsAndKeys:value, key, value, key, ...
   // 字典中只能存放对象类型（NSObject的子类）
   // 如果出现汉字， 代码提示， 一定会失效
    NSDictionary *dic = [[NSDictionary alloc] initWithObjectsAndKeys:@"李四", @"name", [NSNumber numberWithInt:18], @"age", nil];
   // 2> 构造器
    NSDictionary *dctionary = [NSDictionary dictionaryWithObjectsAndKeys:@"李四", @"name", [NSNumber numberWithInt:18], @"age", nil];
   // 3> 推荐使用 字面量 字符串@“” 数值对象类型NSNumber @（） 数组@［］ 字典 @｛key: value, key: value｝
    NSDictionary *diction = @{@"name": @"韩旭", @"age": @18, @"fullName": @"韩旭"};
   //
    NSDictionary *diction1 = @{@"name": @"韩旭",
                                @"age": @(-18)};
   // 4> 取值
   // <1> 通过key取value
  NSString *name = [diction objectForKey:@"name"];
  // <2> 获取所有的key
    NSArray *allkeys = diction.allKeys;
  // <3> 获取所有的value
    NSArray *allValues = diction.allValues;
  // <4> count
    NSUInteger count = diction.count;
  // <5> 通过一个数组， 取到对应数组的value
   NSArray *allValueArray = [diction objectsForKeys:diction.allKeys notFoundMarker:[NSString class]];
    NSLog(@"%@", allValueArray);
  // <6>通过一个对象， 查找所有value是这个对象的所有key
 NSArray *array = [diction allKeysForObject:@"韩旭"];
    NSLog(@"%@",array);
  // 语法糖取值 arr[下标] diction［key］
    NSLog(@"%@", diction[@"name"]);
    
  // 可变字典 NSMutableDctionary
  // 1.初始化方式 （不推荐使用字面量）
    NSMutableDictionary *mutableDic = [NSMutableDictionary dictionaryWithObjectsAndKeys:@"hanxu", @"name", nil];
  // （不推荐使用字面量）
    NSMutableDictionary *mutableDction = [@{} mutableCopy];
  // 2.取值 与不可变字典相同
  // 3. 增 删 改
  // 1>添加 setObject: value forKey: key
  //  如果key已经存在， 会将之前的value覆盖
  //  若果key不存在， 会直接添加
  // 注意： 字典中的key不要重复 如果重复， 会以最后的value进行赋值
    [mutableDic setObject:@"起名好难" forKey:@"name"];
    NSLog(@"%@", mutableDic);
    
  // 删除
    [mutableDic removeObjectForKey:@"name"];
    [mutableDic removeAllObjects];
    [mutableDic removeObjectsForKeys:@[@"name"]];
    NSLog(@"%@",mutableDic);
    
  // 3> 语法糖 与 setObject：fotKey：相同
    mutableDic[@"name"] = @"李成";
    
    /**1、定义联系人类Contact。实例变量：姓名(拼音，首字母大写)、性别、电话号码、住址、分组名称、年龄。方法：自定义初始化方法(姓名、电话号码)、显示联系人信息。
     2、在main.m中定义字典，分组管理所有联系人。分组名为26个大写的英文字母。
     3、可以添加联系人对象，如果姓名或电话号码为空，添加失败。添加联系人到匹配的分组。
     4、删除某个分组的全部联系人。*/
    Contact *contact = [[Contact alloc] initWithName:@"于涵" phoneNumber:@"110"];
    contact.groupName = @"Y";
    [contact showContact];
    Contact *contact1 = [[Contact alloc] initWithName:@"李昊林" phoneNumber:@"120"];
    contact1.groupName = @"L";
    
    NSMutableDictionary *contactDictionary = [NSMutableDictionary dictionary];
//  // key: A~Z value: NSMutableArray
//   // 判断名字和手机号是不是空值
//    if (contact.name.length > 0 && contact.phoneNumber.length > 0) {
//   // 都不是空值， 可以添加
//   // 通过联系人的分组名， 取到对应得分组数组
//NSMutableArray *contactArr = [contactDictionary objectForKey:contact.groupName];
//   // 判断数组是否存在
//        if (contactArr == nil) {
//   // 数组不存在， 创建数组
//            contactArr = [NSMutableArray array];
//            [contactArr addObject:contact];
//            [contactDictionary setObject:contactArr forKey:contact.groupName];
//        } else {
//   // 存在， 直接添加
//            [contactArr addObject:contact];
//            
//
//        }
//        NSLog(@"添加%@联系人成功", contact.name);
//    } else {
//   // 否则添加失败
//        NSLog(@"添加失败 !");
//    }
 
    ContactManager *contactManager = [[ContactManager alloc] initWithDictionary:contactDictionary];
    
    [contactManager addContact:contact];
    [contactManager addContact:contact1];
    
    NSLog(@"%@",contactManager.contactDoctionary);
//  将数字转换成字符串
   [@10 description];
    
    
    
  // 2.集合
  // 不可变  NSSet 可变 NSMUTableSet
  // 1> 初始化
  // 集合会删除掉重复的内容（互异性）
  // 要删除数组中重复的内容， 放入集合中
    NSSet *set = [[NSSet alloc] initWithObjects:@"韩旭", @"韩旭", nil];
    NSLog(@"%@",set);
  // 2>  构造器
    NSSet *setObject = [NSSet setWithObjects:@"于涵", @"yuha", nil];
  // 3> 没有提供集合的字面量
    
  // 取值
  // 从集合中取出任意元素
    [set anyObject];
  // count
    NSUInteger setCount = set.count;
  // 集合去重 （删除掉数组中重复的元素）
    NSArray *repeatArray = @[@10, @20, @10, @30, @100, @10];
    NSLog(@"%@",repeatArray);
    NSSet *repeatSet = [NSSet setWithArray:repeatArray];
    repeatArray = repeatSet.allObjects ;
     NSLog(@"%@",repeatArray);
    
  // 可变集合 NSMutableSet
  // 1>初始化与不可变集合一样
  // 2>取值 anObject
  // 3>可变集合 可变性
    NSMutableSet *mutableSet = [NSMutableSet set];
  // 添加
    [mutableSet addObject:@"123"];
  //  删除
    [mutableSet removeObject:@"123"];
    [mutableSet removeAllObjects];
    

    return 0;
}
